﻿/**
   Данный компонент отвечает за компрессор. Когда аквалангисты к нему приближаются и присоединяются, могут пополнять запысы кислорода
 */

 //Компрессор я является игровым обектом, находящимся на корабле, не имеющим картинки
 //Выполняет наполнение переданного ему бака с кислородом
 //Есть два состояния. Занят, свободен

(F.CompressorStateEnum = function () {
    var sse = F.CompressorStateEnum;
    sse.Busy = "Busy";
    sse.Free = "Free";
})();

(function () {
    "use strict";

    F.Compressor = function (container, environment) {
        var self = this;
        F.Compressor.superclass.constructor.apply(self, [container, environment]);
        self.fillingRate = 3000;//3 литра в секунду
        self.oxygenTank = null;
        self.state = F.CompressorStateEnum.Free;
        self.environment.setCompressor(this);
    };

    extend(F.Compressor, F.Shape);

    var cp = F.Compressor.prototype;

    cp.process = function (dt) {
        var self = this;
        switch(self.state) {
            case F.CompressorStateEnum.Free:
        	    break;
            case F.CompressorStateEnum.Busy:
                self.fillBottleOxygen(dt);
        	    break;
        }
    };

    cp.fillBottleOxygen = function (dt) {
        var self = this;
        this.oxygenTank.fillOxygen(self.fillingRate * dt, dt);
    };


    cp.setOxygenTank = function (oxygenTank) {
        var self = this;
        if (self.state === F.CompressorStateEnum.Busy)
            throw "Logical error. Balon is already set for filling.";

        self.oxygenTank = oxygenTank;
        self.state = F.CompressorStateEnum.Busy;
    };

    cp.removeOxygenTank = function () {
        var self = this;
        if (self.state === F.CompressorStateEnum.Free)
            throw "Logical error. Balon has already been removed.";
        var oxygenTank = self.oxygenTank;
        self.oxygenTank = null;
        self.state = F.CompressorStateEnum.Free;
        return oxygenTank;
    };

    cp.getState= function () {
        var self = this;
        return self.state;
    };

    cp.isBusy = function(){
        var self = this;
        return self.state === F.CompressorStateEnum.Busy;
    }

    cp = null;

} ());